MyBatis delete
1. 前言
本小节,我们将一起学习 MyBatis delete。
在 MyBatis 中,delete 标签对应于 SQL 语句中的 delete 删除。
2. 定义
慕课解释:delete 标签用于映射 SQL 中的
删除
语句。
3. 实例
3.1 xml 实例
如下,是一个真实的 delete 标签实例。
<delete id="deleteUserById">
DELETE FROM imooc_user WHERE id = #{id}
</delete>
每一个 delete 标签都必须有一个唯一的 id 属性,在 delete 标签内部则是一条 SQL 语句。
3.2 注解实例
上面的 delete 标签对应的注解实例如下:
@Delete("DELETE FROM imooc\_user WHERE id = #{id}")
int deleteUserById(Integer id);
4. delete 属性
delete 标签支持一些属性来改变更新语句的行为。
其中常见且重要的属性如下表:
属性 | 描述 |
---|---|
id | 在命名空间中的唯一标识符 |
parameterType | 语句的参数类型,默认可选,MyBatis 会自动推断 |
flushCache | 设置为 true 后,只要语句被调用,都会导致本地缓存和二级缓存被清空,默认为 false |
timeout | 设置超时时间 |
statementType | STATEMENT,PREPARED 或 CALLABLE 中的一个,默认为 PREPARED(预处理) |
5. 实践
5.1 例1. 根据 id 删除用户
请使用 MyBatis 完成对 imooc_user 表中通过 id 删除用户的功能。
分析:
按照 MyBatis 的开发模式,先在对应 UserMapper.xml 文件中添加根据 id 删除用户的 delete 标签,然后在 UserMapper.java 中增加上对应的方法即可。
步骤:
首先,在 UserMapper.xml 中添加 delete 标签,并在标签中写入 SQL :
<delete id="deleteUserById">
DELETE FROM imooc_user WHERE id = #{id}
</delete>
然后在 UserMapper.java 中添加上对应的接口方法,方法接受 id 一个参数。
package com.imooc.mybatis.mapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {
int deleteUserById(Integer id);
}
结果:
通过如下代码,我们运行 deleteUserById 这个方法。
UserMapper userMapper = session.getMapper(UserMapper.class);
int rows = userMapper.deleteUserById(10);
System.out.println(rows);
// 一定要提交
session.commit();
session.close();
成功后,id 为 10 的用户已被删除。
5.2 例2. 根据用户名删除用户
请使用 MyBatis 完成对 imooc_user 表中通过用户名
删除用户的功能。
分析:
同上。
步骤:
首先,在 UserMapper.xml 中添加 delete 标签,并在标签中写入 SQL :
<delete id="deleteUserByName">
DELETE FROM imooc_user WHERE username = #{username}
</delete>
然后在 UserMapper.java 中添加上对应的接口方法,方法接受 username 一个参数。
package com.imooc.mybatis.mapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {
int deleteUserByName(String username);
}
结果:
通过如下代码,我们运行 deleteUserByName 这个方法。
UserMapper userMapper = session.getMapper(UserMapper.class);
int rows = userMapper.deleteUserByName("tom");
System.out.println(rows);
session.commit();
session.close();
成功后,用户名为 tom 的用户已被删除。
6. 小结
- delete 标签并无太多的知识点,主要的工作量在书写 SQL 上,你可以借此机会来复习一下 SQL。